package com.blueocean_health.care.management.mapper;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.ibatis.annotations.Param;
import com.blueocean_health.care.management.domain.base.TeamModule;
import com.blueocean_health.care.management.domain.vo.OrganizationVo;
import com.blueocean_health.care.management.domain.vo.ProjectVo;
import com.blueocean_health.care.management.util.MyMapper;

public interface TeamModuleMapper extends MyMapper<TeamModule> {

	/**
	 * 根据orgId查询出组织和模块的关联关系
	 * @param paramsMap
	 * @return
	 */
	List<TeamModule> findAllModuleByOrgId(Map<String, Object> paramsMap);

	/**
	 * 根据组织id和模块id集合删除数据
	 * @param id
	 * @param removeModuleSet
	 * @return
	 */
	int deleteModuleByOrgIdAndModuleId(@Param("id")int id, @Param("removeModuleSet")Set<String> removeModuleSet);

	/**
	 * 根据组织id和模块id集合添加数据(全选模块)
	 * @param organizationVo
	 * @param addModuleSet
	 * @return
	 */
	int addAllModuleByOrgIdAndModuleId(@Param("organizationVo")OrganizationVo organizationVo, @Param("addModuleSet")Set<String> addModuleSet);
	/**
	 * 根据组织id和模块id集合添加数据（半选模块）
	 * @param organizationVo
	 * @param addModuleSet
	 * @return
	 */
	int addHalfModuleByOrgIdAndModuleId(@Param("organizationVo")OrganizationVo organizationVo, @Param("addModuleSet")Set<String> addModuleSet);

	/**
	 * 更新组织与模块中间表状态失败
	 * @param id
	 * @param status
	 * @return
	 */
	int updateTeamMoudleByOrgId(@Param("id")Integer id, @Param("status")Integer status);

	/**
	 * 更新组织与模块中间表状态(code)
	 * @param subLikeCode
	 * @param status
	 * @return
	 */
	int updateTeamMoudleStatusByCodeLike(@Param("subLikeCode")String subLikeCode, @Param("status")Integer status);
	
	////////////////////////////////////////////////////////////////////////////////////////////////
	//////////////// 以下是项目模块
	////////////////////////////////////////////////////////////////////////////////////////////////
	
	/**
	 * 批量保存项目全选模块信息
	 * @param projectVo
	 */
	int addProjectAllModuleBase(ProjectVo projectVo);
	
	/**
	 * 批量保存项目半选模块信息
	 * @param projectVo
	 */
	int addProjectHalfModuleBase(ProjectVo projectVo);

	/**
	 * 根据projectId查询出组织和模块的关联关系
	 * @param projectVo
	 * @return
	 */
	List<TeamModule> findAllModuleByProjectId(Map<String, String> paramsMap);

	/**
	 * 根据项目id和模块id集合删除数据
	 * @param id
	 * @param removeModuleSet
	 * @return
	 */
	int deleteModuleByProjectIdAndModuleId(@Param("id")int id, @Param("removeModuleSet")Set<String> removeModuleSet);

	/**
	 * 根据项目id和模块id集合添加数据
	 * @param projectVo
	 * @param addModuleSet
	 * @return
	 */
	int addAllModuleByProjectIdAndModuleId(@Param("projectVo")ProjectVo projectVo, @Param("addModuleSet")Set<String> addModuleSet);
	
	/**
	 * 根据项目id和模块id集合添加数据
	 * @param projectVo
	 * @param addModuleSet
	 * @return
	 */
	int addHalfModuleByProjectIdAndModuleId(@Param("projectVo")ProjectVo projectVo, @Param("addModuleSet")Set<String> addModuleSet);

	/**
	 * 更新项目模块中间表状态
	 * @param id
	 * @param status
	 * @return
	 */
	int updateTeamModuleStatusByRoId(@Param("id")Integer id, @Param("status")Integer status);
	
	/**
	 * 移除下级组织的可用模块
	 * @param subOrgParams
	 * @return
	 */
	int removeSubOrgModuleLikeCodeAndSet(Map<String, Object> subOrgParams);
	/**
	 * 查询上级移除的模块，下级是否被征用
	 * @param subOrgParams
	 * @return
	 */
	List<Map<String, String>> findSubOrgModuleLikeCodeAndSet(Map<String, Object> subOrgParams);
	
}